모서리 둥근 사각형 안에 그라데이션으로 색채우기 :: 안드로이드 설치 및 개발[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

안드로이드 설치 및 개발
[1]
등록일:2018-07-19 08:11:51 (0%)
작성자:
제목:모서리 둥근 사각형 안에 그라데이션으로 색채우기

안녕하세요?
프쟁이 입니다.

모서리가 둥근 사각형 안을 그라데이션 방식으로 색상을 채우고 있습니다.

여섯개의 모서리 둥근 사각형을 각 그라데이션 옵션별로 색상을 채우고 있습니다.

GradientDrawable 객체를 생성하여 그리기를 수행하면 그라데이션을 적용할 수 있습니다.

먼저 원하시는 패키지 경로에 RoundRects.java 액티비티 클래스 파일을 추가합니다.

/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package net.korsoft.Test003;

import net.korsoft.Test003.R;

import android.app.Activity;
import android.content.Context;
import android.graphics.*;
import android.graphics.drawable.*;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.*;

/*
 * 모서리가 둥근 사각형 안을 그라데이션 방식으로 색상을 채우고 있습니다.
 * 여섯개의 모서리 둥근 사각형을 각 그라데이션 옵션별로 색상을 채우고 있습니다.
 * GradientDrawable 객체를 생성하여 그리기를 수행하면 그라데이션을 적용할 수 있습니다.
 */
public class RoundRects extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new SampleView(this));
    }
    
    private static class SampleView extends View {
        private Path    mPath;
        private Paint   mPaint;
        private Rect    mRect;
        private GradientDrawable mDrawable;

        public SampleView(Context context) {
            super(context);
            setFocusable(true);

            mPath = new Path();
            mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            mRect = new Rect(0, 0, 120, 120);
            
            //GradientDrawable.Orientation.TL_BR : 왼쪽에서 우측으로 그라데이션 적용
            //정수배열 : 그라데이션 시작색상값과 종료색상값
            mDrawable = new GradientDrawable(GradientDrawable.Orientation.TL_BR,
                                             new int[] { 0xFFFF0000, 0xFF00FF00,
                                                 0xFF0000FF });
            //사각형 영역을 그리기 객체에 설정합니다.
            mDrawable.setShape(GradientDrawable.RECTANGLE);
            //그라데이션 각도를 설정합니다.
            mDrawable.setGradientRadius((float)(Math.sqrt(2) * 60));
        }
        
        //사각형의 모서리를 둥글게 설정하는 메소드입니다.
        static void setCornerRadii(GradientDrawable drawable, float r0,
                                   float r1, float r2, float r3) {
            drawable.setCornerRadii(new float[] { r0, r0, r1, r1,
                                                  r2, r2, r3, r3 });
        }
        
        /*
         * (non-Javadoc)
         * @see android.view.View#onDraw(android.graphics.Canvas)
         * 실제 그리기를 수행하는 메소드입니다.
         */
        @Override protected void onDraw(Canvas canvas) {
            
        //생성자에서 그라데이션 등을 설정한 그리기 객체에
        //사각형 영역을  경계선으로 설정합니다.
            mDrawable.setBounds(mRect);

            //사각형 모서리의 둥글게 할 정도를 수치로 설정합니다.
            float r = 16;
            
            //그라데이션의 각 옵션별로 모서리 둥근 사각형을 차례대로
            //원점을 이동해가면서, 출력을 하고 있습니다.
            canvas.save();
            canvas.translate(10, 10);
            mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
            setCornerRadii(mDrawable, r, r, 0, 0);
            mDrawable.draw(canvas);
            canvas.restore();
            
            canvas.save();
            canvas.translate(10 + mRect.width() + 10, 10);
            mDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT);
            setCornerRadii(mDrawable, 0, 0, r, r);
            mDrawable.draw(canvas);
            canvas.restore();
            
            canvas.translate(0, mRect.height() + 10);
    
            canvas.save();
            canvas.translate(10, 10);
            mDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT);
            setCornerRadii(mDrawable, 0, r, r, 0);
            mDrawable.draw(canvas);
            canvas.restore();
            
            canvas.save();
            canvas.translate(10 + mRect.width() + 10, 10);
            mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
            setCornerRadii(mDrawable, r, 0, 0, r);
            mDrawable.draw(canvas);
            canvas.restore();
            
            canvas.translate(0, mRect.height() + 10);
            
            canvas.save();
            canvas.translate(10, 10);
            mDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT);
            setCornerRadii(mDrawable, r, 0, r, 0);
            mDrawable.draw(canvas);
            canvas.restore();
            
            canvas.save();
            canvas.translate(10 + mRect.width() + 10, 10);
            mDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT);
            setCornerRadii(mDrawable, 0, r, 0, r);
            mDrawable.draw(canvas);
            canvas.restore();
            
        }
    }
}


AndroidManifest.xml 파일을 설정해줍니다.

<?xml version="1.0" encoding="utf-8"?>
      package="net.korsoft.Test003"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <activity android:name=".RoundRects" android:label="Graphics/RoundRects">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
[본문링크] 모서리 둥근 사각형 안에 그라데이션으로 색채우기
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=34731
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.